package com.its.web;

import com.github.tobato.fastdfs.domain.fdfs.StorePath;
import com.github.tobato.fastdfs.domain.fdfs.ThumbImageConfig;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import com.its.util.Result;
import io.swagger.annotations.Api;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;

/**
 * <p>
 *
 * </p>
 *
 * @author sunwz
 * @version 1.0
 */
@RestController
@RequestMapping("/file")
@Api(tags = "文件上传")
public class FileController {

    @Autowired
    private FastFileStorageClient fastFileStorageClient; // FastDFS 客户端
    @Autowired
    private ThumbImageConfig thumbImageConfig; // 缩略图配置

    /**
     * 单文件上传
     */
    @PostMapping("upload") // 用于处理 HTTP POST 请求方法的注解
    public Result upload(@RequestBody MultipartFile file){ // 处理上传文件的方法
        String suffix = StringUtils.substringAfterLast(file.getOriginalFilename(), "."); // 获取文件后缀名
        try {
            InputStream is = file.getInputStream(); // 获取输入流
            StorePath storePath = fastFileStorageClient.uploadImageAndCrtThumbImage(is, file.getSize(), suffix, null); // 上传文件到 FastDFS 分布式文件系统并生成缩略图
            System.out.println(storePath.getFullPath());  // 输出文件在 FastDFS 中的完整路径
            System.out.println(storePath.getPath());      // 输出文件在 FastDFS 中的路径
            System.out.println(storePath.getGroup());     // 输出文件所在的存储组名称
            System.out.println(thumbImageConfig.getThumbImagePath(storePath.getFullPath())); // 输出缩略图在 FastDFS 中的路径
            return Result.ok().message("上传成功"); // 返回上传成功的信息
        } catch (IOException e) {
            return Result.ok().message("上传失败"); // 返回上传失败的信息
        }
    }

}
